import 'dart:async';

import 'package:car_music/src/modules/color/my_color.dart';
import 'package:car_music/src/modules/cross/my_crossover.dart';
import 'package:car_music/src/modules/delay/my_delay.dart';
import 'package:car_music/src/modules/eq/my_eq.dart';
import 'package:car_music/src/modules/sum/my_sum.dart';
import 'package:flutter/material.dart';
import 'package:flutter_kit_dsp/flutter_kit_dsp.dart';
import 'package:flutter_kit_plus/flutter_kit.dart';

import 'src/modules/home/my_home.dart';
import 'src/tool/assets.dart';

final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

Future<void> main() async {
  LogManager.initFireBase(
      crashTest: false,
      runMain: () async {
        configLoading();

        requestPermissions();
        initRealm();
        registerDelegate();
        BluetoothManager.key = navigatorKey;
        GetxManager.initGetx();
        runApp(const MyApp());
      });
}

void initRealm() {
  // // 创建不同模型的 RealmManager 实例
  RealmManager.schemaVersion = 1;
  RealmManager<GlobalModel>(
    allSchemas: [
      SignModel.schema,
      PassType.schema,
      Passmodel.schema,
      ChannelModel.schema,
      VolumeModel.schema,
      REMModel.schema,
      GlobalModel.schema
    ],
  );
}

///权限请求
Future<void> requestPermissions() async {
  BluetoothManager.instance.requestPermissions();
  await Permission.microphone.request();
}

///设置吐司的颜色
void configLoading() {
  EasyLoading.instance
    ..displayDuration = const Duration(milliseconds: 2000) // 设置提示框显示的时长，默认是 2000 毫秒（2 秒）
    ..indicatorType = EasyLoadingIndicatorType.fadingCircle // 设置加载指示器的类型，这里使用的是淡入淡出的圆形
    ..loadingStyle = EasyLoadingStyle.custom // 使用自定义样式，以便可以手动设置颜色等属性
    ..indicatorSize = 45.0 // 设置加载指示器的大小，单位是像素
    ..radius = 10.0 // 设置加载框的圆角半径，单位是像素
    ..progressColor = Colors.white // 设置进度条或指示器的颜色，
    ..backgroundColor = Color_bg_btn // 设置加载框的背景颜色，
    ..indicatorColor = Colors.white // 设置指示器的颜色，，与 progressColor 一致
    ..textColor = Colors.white // 设置加载框中提示文字的颜色，
    ..maskColor = Color_bg_btn.withOpacity(0.5) // 设置背景遮罩颜色，这里设置为半透明的蓝色
    ..userInteractions = false // 设置在加载框显示时，用户是否可以与其他 UI 交互，这里设置为不可以（禁用用户交互）
    ..dismissOnTap = false; // 设置点击加载框时是否关闭加载框，这里设置为否（点击不关闭）
}

void registerDelegate() {
  CHDefaultConfig().inNumbers = 4;
  CHDefaultConfig().lineColors!.removeRange(6, CHDefaultConfig().lineColors!.length);
  CHDefaultConfig().imgs = [
    assets.soud_l_off,
    assets.soud_r_off,
    assets.soud_l_max_off,
    assets.soud_r_max_off,
    assets.soud_b_off,
    assets.soud_b_off
  ];
  CHDefaultConfig().highLightImgs = [
    assets.soud_l_on,
    assets.soud_r_on,
    assets.soud_l_max_on,
    assets.soud_r_max_on,
    assets.soud_b_on,
    assets.soud_b_on
  ];

  CHDefaultConfig().signList = [25, 40, 63, 100, 160, 250, 400, 630, 1000, 1600, 2500, 4000, 6300, 10000, 16000];
  DelegateRegistry.register<HomePageDelegate>(() => MyHome());
  DelegateRegistry.register<EqPageDelegate>(() => MyEq());
  DelegateRegistry.register<SumPageDelegate>(() => MySum());
  DelegateRegistry.register<ColorPageDelegate>(() => MyColor());
  DelegateRegistry.register<DelayPageDelegate>(() => MyDelay());
  DelegateRegistry.register<CrossoverPageDelegate>(() => MyCrossover());
}

class MyCustomScrollBehavior extends ScrollBehavior {
  @override
  ScrollPhysics getScrollPhysics(BuildContext context) {
    return const ClampingScrollPhysics(); // 强制使用 ClampingScrollPhysics
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'KODIA DSP',
      navigatorKey: navigatorKey,

      debugShowCheckedModeBanner: false,
      scrollBehavior: MyCustomScrollBehavior(), // 设置全局的 ScrollBehavior
      // home: MyhomePage(),
      initialRoute: AppPages.INITIAL,
      getPages: AppPages.routes,
      theme: ThemeData(
        // 设置全局 AppBar 主题
        appBarTheme: const AppBarTheme(
          backgroundColor: Color_bg_theme, // AppBar 背景颜色
          titleTextStyle: TextStyle(color: Colors.white, fontSize: 28, fontWeight: FontWeight.bold), // AppBar 标题文本颜色
        ),

        // 设置全局文本颜色
        textTheme: const TextTheme(
          bodySmall: TextStyle(color: Colors.white), // 小号文本颜色
          bodyMedium: TextStyle(color: Colors.white), // 中号文本颜色
          bodyLarge: TextStyle(color: Colors.white), // 大号文本颜色
        ),

        ///全局slider设置
        sliderTheme: SliderThemeData(
          trackHeight: 5,
          activeTrackColor: Color_active_slider, // 滑动过的颜色
          inactiveTrackColor: Color_unActive_slider, // 未滑动部分的颜色
          // activeTrackColor: Colors.transparent, // 滑动过的颜色
          // inactiveTrackColor: Colors.transparent, // 未滑动部分的颜色
          thumbColor: Color_thumb_slider, // 滑块的颜色
          overlayColor: Color_thumb_slider.withOpacity(0.2), // 滑块按下时的颜色
          activeTickMarkColor: Colors.transparent, // 隐藏刻度线
          inactiveTickMarkColor: Colors.transparent, // 隐藏刻度线
          thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 10.0), // 自定义滑块的形状和大小
          overlayShape: const RoundSliderOverlayShape(overlayRadius: 0.0), // 设置圆点到两端的间距为 0 以减小间距
          trackShape: null,

          //thumbIcon: Image.asset('assets/slider_thumb.png'), // 自定义滑点图片
        ),

        ///全局switch设置
        switchTheme: SwitchThemeData(
          ///圆点颜色
          thumbColor: const WidgetStatePropertyAll(Color_thumb_slider),

          ///轨道不同状态下的颜色
          trackColor: WidgetStateProperty.resolveWith<Color>((states) {
            return states.contains(WidgetState.selected) ? Color_select_btn : Color_bg_btn;
          }),

          ///线条颜色
          trackOutlineColor: const WidgetStatePropertyAll(Color_border),

          ///点击圆点，高亮时的颜色
          overlayColor: const WidgetStatePropertyAll(Colors.transparent),
        ),

        /// 设置全局 BottomNavigationBar 主题
        bottomNavigationBarTheme: const BottomNavigationBarThemeData(
          backgroundColor: Color_bg_theme, // BottomNavigationBar 背景颜色
        ),

        primaryColor: Color_bg_theme, // 应用程序的主要颜色，用于大多数部件的背景颜色
        scaffoldBackgroundColor: Color_bg_theme, // Scaffold 的背景颜色
        highlightColor: Colors.white10.withAlpha(30), // 按钮等组件点击时的高亮颜色
        splashColor: Colors.white10.withAlpha(15), // 点击时的水波纹颜色
        useMaterial3: true, // 启用 Material 3 设计规范
      ),
      builder: EasyLoading.init(),
    );
  }
}
